#include <iostream>

using std::cout;
using std::endl;

class A
{
public:
    A()
    {
        cout << "A()" << endl;
    }

    void print() const
    {
        cout << "void A::print() const" << endl;
    }

    ~A()
    {
        cout << "~A()" << endl;
    }
};

class B
{
public:
    B()
    {
        cout << "B()" << endl;
    }

    void print() const
    {
        cout << "void B::print() const" << endl;
    }

    ~B()
    {
        cout << "~B()" << endl;
    }
};

class C
{
public:
    C()
    {
        cout << "C()" << endl;
    }

    void print() const
    {
        cout << "void C::print() const" << endl;
    }

    ~C()
    {
        cout << "~C()" << endl;
    }
};

//派生类继承基类的时候，如果是多继承，那么多个基类的构造函数的
//执行顺序只与多个基类被继承的先后顺序有关，与基类的构造函数
//在派生类的初始化列表中的先后位置没有关系
//
//对于多继承而言，每个基类的前面都要写继承方式，否则就按照默认
//的私有进行继承
class D
: public A
, public B
, public C
{
public:
    D()
    {
        cout << "D()" << endl;
    }

    ~D()
    {
        cout << "~D()" << endl;
    }
};

void test()
{
    D d;//调用D的构造函数

    //1、多基继承（多基派生）成员函数访问冲突：
    //解决方案：使用类名 + 作用域限定符
    d.A::print();
    d.B::print();
    d.C::print();
}

int main(int argc, char **argv)
{
    test();
    return 0;
}

